{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# XGBoost Parameter Tuning for Otto Dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第二步：调整树的参数：max_depth & min_child_weight\n",
    "(粗调，参数的步长为2；下一步是在粗调最佳参数周围，将步长降为1，进行精细调整)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先 import 必要的模块"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# path to where the data lies\n",
    "dpath = './'\n",
    "train = pd.read_csv(dpath +\"FE_train.csv\")\n",
    "#train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Variable Identification"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Target 分布，看看各类样本分布是否均衡"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.Disbursed);\n",
    "pyplot.xlabel('Disbursed');\n",
    "pyplot.ylabel('Number of customers');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "每类样本分布不是很均匀，所以交叉验证时也考虑各类样本按比例抽取"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于电脑老旧，故取1%的数据用于完成训练测试任务，集中精力放在参数调优的学习上。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "y = train['Disbursed']\n",
    "X = train.drop(['Disbursed'], axis=1)\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.99,random_state=4)\n",
    "\n",
    "# drop ids and get labels\n",
    "y_train = y_train\n",
    "X_train = X_train.drop(['ID','DOB','LoggedIn','Unnamed: 26'], axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "各类样本不均衡，交叉验证是采用StratifiedKFold，在每折采样时各类样本按比例采样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一轮参数调整得到的n_estimators最优值（58），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用交叉验证评价模型性能时，用scoring参数定义评价指标。评价指标是越高越好，因此用一些损失函数当评价指标时，需要再加负号，如neg_log_loss，neg_mean_squared_error 详见sklearn文档：http://scikit-learn.org/stable/modules/model_evaluation.html#log-loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [4, 5, 6], 'min_child_weight': [0.1, 0.2, 0.3, 0.4, 0.5, 1, 2]}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "max_depth = [4,5,6]\n",
    "min_child_weight = [0.1,0.2,0.3,0.4,0.5,1,2]\n",
    "param_test2_2 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/model_selection/_search.py:762: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.07544, std: 0.00969, params: {'max_depth': 4, 'min_child_weight': 0.1},\n",
       "  mean: -0.07691, std: 0.00931, params: {'max_depth': 4, 'min_child_weight': 0.2},\n",
       "  mean: -0.07844, std: 0.01037, params: {'max_depth': 4, 'min_child_weight': 0.3},\n",
       "  mean: -0.07400, std: 0.00968, params: {'max_depth': 4, 'min_child_weight': 0.4},\n",
       "  mean: -0.07751, std: 0.01046, params: {'max_depth': 4, 'min_child_weight': 0.5},\n",
       "  mean: -0.07721, std: 0.01021, params: {'max_depth': 4, 'min_child_weight': 1},\n",
       "  mean: -0.07658, std: 0.00647, params: {'max_depth': 4, 'min_child_weight': 2},\n",
       "  mean: -0.07599, std: 0.01078, params: {'max_depth': 5, 'min_child_weight': 0.1},\n",
       "  mean: -0.07630, std: 0.01175, params: {'max_depth': 5, 'min_child_weight': 0.2},\n",
       "  mean: -0.07790, std: 0.00852, params: {'max_depth': 5, 'min_child_weight': 0.3},\n",
       "  mean: -0.07462, std: 0.01162, params: {'max_depth': 5, 'min_child_weight': 0.4},\n",
       "  mean: -0.07546, std: 0.00863, params: {'max_depth': 5, 'min_child_weight': 0.5},\n",
       "  mean: -0.07743, std: 0.01028, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.07658, std: 0.00647, params: {'max_depth': 5, 'min_child_weight': 2},\n",
       "  mean: -0.07659, std: 0.00865, params: {'max_depth': 6, 'min_child_weight': 0.1},\n",
       "  mean: -0.07632, std: 0.01009, params: {'max_depth': 6, 'min_child_weight': 0.2},\n",
       "  mean: -0.07456, std: 0.00877, params: {'max_depth': 6, 'min_child_weight': 0.3},\n",
       "  mean: -0.07407, std: 0.01156, params: {'max_depth': 6, 'min_child_weight': 0.4},\n",
       "  mean: -0.07527, std: 0.00847, params: {'max_depth': 6, 'min_child_weight': 0.5},\n",
       "  mean: -0.07743, std: 0.01028, params: {'max_depth': 6, 'min_child_weight': 1},\n",
       "  mean: -0.07658, std: 0.00647, params: {'max_depth': 6, 'min_child_weight': 2}],\n",
       " {'max_depth': 4, 'min_child_weight': 0.4},\n",
       " -0.07400012895834215)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_2 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=58,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_2 = GridSearchCV(xgb2_2, param_grid = param_test2_2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_2.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_2.grid_scores_, gsearch2_2.best_params_,     gsearch2_2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([0.08815246, 0.07989087, 0.07602119, 0.0743701 , 0.07225642,\n",
       "        0.07466555, 0.06254053, 0.08341546, 0.08630753, 0.08277764,\n",
       "        0.10582662, 0.08647079, 0.07118335, 0.06018691, 0.08206477,\n",
       "        0.0776289 , 0.07589808, 0.07651963, 0.07297249, 0.06850019,\n",
       "        0.05341945]),\n",
       " 'std_fit_time': array([0.00483532, 0.00595165, 0.00276539, 0.00121911, 0.00236289,\n",
       "        0.00778639, 0.00363837, 0.00341987, 0.00819934, 0.00836451,\n",
       "        0.01812132, 0.01147755, 0.00323939, 0.00151928, 0.00339067,\n",
       "        0.0023899 , 0.00177027, 0.00264378, 0.00141884, 0.00136644,\n",
       "        0.0083723 ]),\n",
       " 'mean_score_time': array([0.00619168, 0.00465631, 0.00455275, 0.00465646, 0.00446172,\n",
       "        0.00572114, 0.00438523, 0.00458565, 0.0047368 , 0.0051846 ,\n",
       "        0.00515184, 0.00550299, 0.00462031, 0.0043642 , 0.00457301,\n",
       "        0.00456047, 0.00460544, 0.00453959, 0.00460649, 0.00447836,\n",
       "        0.00374122]),\n",
       " 'std_score_time': array([7.86101313e-04, 8.19983852e-05, 8.48578046e-05, 1.03153952e-04,\n",
       "        1.24986778e-04, 1.68589955e-03, 5.95000303e-05, 1.25540421e-04,\n",
       "        2.84605066e-04, 1.38887511e-03, 8.76140361e-04, 1.58705770e-03,\n",
       "        3.57947937e-04, 1.88152559e-04, 6.86681270e-05, 8.87588534e-05,\n",
       "        1.86912904e-04, 1.65383639e-04, 1.40918652e-04, 6.50951012e-05,\n",
       "        6.87974901e-04]),\n",
       " 'param_max_depth': masked_array(data=[4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6,\n",
       "                    6, 6, 6],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_min_child_weight': masked_array(data=[0.1, 0.2, 0.3, 0.4, 0.5, 1, 2, 0.1, 0.2, 0.3, 0.4, 0.5,\n",
       "                    1, 2, 0.1, 0.2, 0.3, 0.4, 0.5, 1, 2],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'max_depth': 4, 'min_child_weight': 0.1},\n",
       "  {'max_depth': 4, 'min_child_weight': 0.2},\n",
       "  {'max_depth': 4, 'min_child_weight': 0.3},\n",
       "  {'max_depth': 4, 'min_child_weight': 0.4},\n",
       "  {'max_depth': 4, 'min_child_weight': 0.5},\n",
       "  {'max_depth': 4, 'min_child_weight': 1},\n",
       "  {'max_depth': 4, 'min_child_weight': 2},\n",
       "  {'max_depth': 5, 'min_child_weight': 0.1},\n",
       "  {'max_depth': 5, 'min_child_weight': 0.2},\n",
       "  {'max_depth': 5, 'min_child_weight': 0.3},\n",
       "  {'max_depth': 5, 'min_child_weight': 0.4},\n",
       "  {'max_depth': 5, 'min_child_weight': 0.5},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 2},\n",
       "  {'max_depth': 6, 'min_child_weight': 0.1},\n",
       "  {'max_depth': 6, 'min_child_weight': 0.2},\n",
       "  {'max_depth': 6, 'min_child_weight': 0.3},\n",
       "  {'max_depth': 6, 'min_child_weight': 0.4},\n",
       "  {'max_depth': 6, 'min_child_weight': 0.5},\n",
       "  {'max_depth': 6, 'min_child_weight': 1},\n",
       "  {'max_depth': 6, 'min_child_weight': 2}],\n",
       " 'split0_test_score': array([-0.06909063, -0.06985564, -0.07810091, -0.07770992, -0.07675779,\n",
       "        -0.08518067, -0.08244076, -0.07189058, -0.07407152, -0.07724748,\n",
       "        -0.06517175, -0.07020305, -0.08518067, -0.08244076, -0.0787302 ,\n",
       "        -0.07863286, -0.0709663 , -0.06503658, -0.07100456, -0.08518067,\n",
       "        -0.08244076]),\n",
       " 'split1_test_score': array([-0.08850602, -0.08658079, -0.09026186, -0.08409379, -0.09158562,\n",
       "        -0.08990132, -0.08179428, -0.09184993, -0.08530584, -0.09124224,\n",
       "        -0.09442786, -0.08499501, -0.09036689, -0.08179428, -0.08643356,\n",
       "        -0.08695094, -0.08865791, -0.09352204, -0.08499501, -0.09036689,\n",
       "        -0.08179428]),\n",
       " 'split2_test_score': array([-0.0752104 , -0.0803387 , -0.08554131, -0.06859761, -0.0762751 ,\n",
       "        -0.07346591, -0.0752873 , -0.07832544, -0.08307518, -0.07846381,\n",
       "        -0.07894356, -0.080945  , -0.07412736, -0.0752873 , -0.07889981,\n",
       "        -0.07990145, -0.07727659, -0.07028014, -0.08188472, -0.07412736,\n",
       "        -0.0752873 ]),\n",
       " 'split3_test_score': array([-0.08306392, -0.08526679, -0.078412  , -0.08172978, -0.08307247,\n",
       "        -0.07695448, -0.07860976, -0.07905749, -0.08470552, -0.07817042,\n",
       "        -0.07304028, -0.0799283 , -0.07695448, -0.07860976, -0.07843854,\n",
       "        -0.0789505 , -0.0741519 , -0.08001374, -0.07724422, -0.07695448,\n",
       "        -0.07860976]),\n",
       " 'split4_test_score': array([-0.06129107, -0.06247816, -0.05979232, -0.05775486, -0.05973958,\n",
       "        -0.06039467, -0.06465209, -0.05874052, -0.0542168 , -0.06432579,\n",
       "        -0.06148746, -0.06118848, -0.06039467, -0.06465209, -0.06033502,\n",
       "        -0.05706346, -0.0617127 , -0.06148746, -0.06118848, -0.06039467,\n",
       "        -0.06465209]),\n",
       " 'mean_test_score': array([-0.07544137, -0.07691249, -0.07844272, -0.07400013, -0.07750567,\n",
       "        -0.0772079 , -0.07657729, -0.07598791, -0.07629779, -0.0779048 ,\n",
       "        -0.07461842, -0.07546233, -0.0774333 , -0.07657729, -0.07658857,\n",
       "        -0.07632463, -0.07456372, -0.07407207, -0.07527468, -0.0774333 ,\n",
       "        -0.07657729]),\n",
       " 'std_test_score': array([0.00967973, 0.00929782, 0.01035412, 0.00966489, 0.01044156,\n",
       "        0.0101998 , 0.00646503, 0.01076232, 0.01172621, 0.00850923,\n",
       "        0.01161719, 0.00861705, 0.01027082, 0.00646503, 0.00863667,\n",
       "        0.01006803, 0.00875661, 0.01155469, 0.00845785, 0.01027082,\n",
       "        0.00646503]),\n",
       " 'rank_test_score': array([ 6, 15, 21,  1, 19, 16, 11,  8,  9, 20,  4,  7, 17, 11, 14, 10,  3,\n",
       "         2,  5, 17, 11], dtype=int32),\n",
       " 'split0_train_score': array([-0.03956748, -0.04337835, -0.0420963 , -0.04833619, -0.04381963,\n",
       "        -0.05535395, -0.06718739, -0.03370739, -0.0379187 , -0.03952003,\n",
       "        -0.04195531, -0.04735172, -0.05535395, -0.06718739, -0.03783895,\n",
       "        -0.04121289, -0.03967466, -0.04230719, -0.04801258, -0.05535395,\n",
       "        -0.06718739]),\n",
       " 'split1_train_score': array([-0.03574562, -0.04181653, -0.04112788, -0.04289711, -0.05020841,\n",
       "        -0.05844706, -0.06713543, -0.0321648 , -0.03556111, -0.04162091,\n",
       "        -0.0470276 , -0.04788731, -0.05985944, -0.06713543, -0.03457408,\n",
       "        -0.03581611, -0.03975639, -0.04033063, -0.04788731, -0.05985944,\n",
       "        -0.06713543]),\n",
       " 'split2_train_score': array([-0.0364203 , -0.03898545, -0.04124366, -0.04680814, -0.0497094 ,\n",
       "        -0.05662375, -0.06708665, -0.03839736, -0.0384958 , -0.04292642,\n",
       "        -0.04625027, -0.0540864 , -0.05709953, -0.06708665, -0.03211195,\n",
       "        -0.03717212, -0.04989165, -0.04561734, -0.04898446, -0.05709953,\n",
       "        -0.06708665]),\n",
       " 'split3_train_score': array([-0.03662314, -0.0394876 , -0.04559433, -0.04524182, -0.05447893,\n",
       "        -0.05588616, -0.06717389, -0.0397302 , -0.03621268, -0.04358561,\n",
       "        -0.04080096, -0.04687623, -0.05588616, -0.06717389, -0.03451225,\n",
       "        -0.03909477, -0.04235663, -0.04506427, -0.04586147, -0.05588616,\n",
       "        -0.06717389]),\n",
       " 'split4_train_score': array([-0.03909228, -0.04191607, -0.04139714, -0.04801125, -0.05048359,\n",
       "        -0.05746041, -0.06970407, -0.03918228, -0.03812155, -0.04394139,\n",
       "        -0.04259587, -0.05077331, -0.05746041, -0.06970407, -0.03518561,\n",
       "        -0.04267708, -0.04532903, -0.04259587, -0.05077331, -0.05746041,\n",
       "        -0.06970407]),\n",
       " 'mean_train_score': array([-0.03748976, -0.0411168 , -0.04229186, -0.0462589 , -0.04973999,\n",
       "        -0.05675427, -0.06765749, -0.03663641, -0.03726197, -0.04231887,\n",
       "        -0.043726  , -0.04939499, -0.0571319 , -0.06765749, -0.03484456,\n",
       "        -0.03919459, -0.04340167, -0.04318306, -0.04830382, -0.0571319 ,\n",
       "        -0.06765749]),\n",
       " 'std_train_score': array([0.00153765, 0.00163951, 0.00168515, 0.00200118, 0.00341413,\n",
       "        0.00110415, 0.00102389, 0.00308961, 0.00115641, 0.00160792,\n",
       "        0.0024593 , 0.00270929, 0.00156598, 0.00102389, 0.00182939,\n",
       "        0.00251856, 0.00384982, 0.00193458, 0.00159906, 0.00156598,\n",
       "        0.00102389])}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_2.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/jhony/anaconda3/lib/python3.7/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.074000 using {'max_depth': 4, 'min_child_weight': 0.4}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_2.best_score_, gsearch2_2.best_params_))\n",
    "test_means = gsearch2_2.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_2.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_2.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_2.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_2.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_2.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(min_child_weight), len(max_depth))\n",
    "train_scores = np.array(train_means).reshape(len(min_child_weight), len(max_depth))\n",
    "\n",
    "for i, value in enumerate(min_child_weight):\n",
    "    pyplot.plot(max_depth, test_scores[i], label= 'test_min_child_weight:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( '- Log Loss' )\n",
    "pyplot.savefig( 'max_depth_vs_min_child_weght2.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最佳值：'max_depth': 4, 'min_child_weight': 0.4"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
